package com.example.demo.api;

import com.example.demo.rabbitmq.fanout.FanoutSender;
import com.example.demo.rabbitmq.routing.RoutingSender;
import com.example.demo.rabbitmq.topic.TopicSender;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @author 鱼仔
 * @date 2021/5/26 9:36 上午
 * 概要
 */
@RestController
@Slf4j
public class TestApi {

    @Autowired
    private FanoutSender fanoutSender;

    @Autowired
    private RoutingSender routingSender;

    @Autowired
    private TopicSender topicSender;


    @GetMapping(value = "/test")
    @ResponseBody
    public void test() {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                fanoutSender.simpleSend1("这是给消费者1消息" + i);
                log.error("队列1的消息");
            } else {
                fanoutSender.simpleSend2("这是给消费者2消息" + i);
                log.error("队列2的消息");
            }
        }
    }

    @GetMapping(value = "/direct")
    @ResponseBody
    public void direct1() {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                routingSender.simpleSend("这是给路由direct1消息" + i, "direct1");
            } else {
                routingSender.simpleSend("这是给路由direct2消息" + i, "direct2");
            }
        }
    }


    @GetMapping(value = "/topic")
    @ResponseBody
    public void topic() {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                topicSender.topicSend("这是给路由red消息" + i, "order.red.error");
            } else {
                topicSender.topicSend("这是给路由order消息" + i, "order.no.sum");
            }
        }
    }


//
//    @Autowired
//    private StringRedisTemplate stringRedisTemplate;
//
//    @Autowired
//    private RedissonClient redissonClient;
//
//
//    @Autowired
//    private AmqpTemplate amqpTemplate;
//
//    @GetMapping(value = "/test")
//    @ResponseBody
//    public String test() {
//        RLock lock = redissonClient.getLock("getLock");
//        lock.lock();
//        try {
//            int avl = Integer.valueOf(stringRedisTemplate.opsForValue().get("a"));
//            if (avl > 0) {
//                avl = avl - 1;
//                System.out.println("------" + avl);
//                stringRedisTemplate.opsForValue().set("a", String.valueOf(avl));
//                return "s";
//            }
//            return "f";
//        } finally {
//            lock.unlock();
//        }
//    }
//
//    @GetMapping(value = "/getThread")
//    @ResponseBody
//    public void get() {
//        long name = Thread.currentThread().getId();
//        System.out.println("业务代码的线程名字：" + name);
//        TestTools.getDemo();
//    }
//
//
//    /**
//     * 测试用户的接口幂等性
//     */
//    @GetMapping(value = "/getToken")
//    @ResponseBody
//    public String getToken() {
//        String s = UUID.randomUUID().toString();
//        stringRedisTemplate.opsForValue().set(s, s, 100, TimeUnit.SECONDS);
//        return s;
//    }
//
//    /**
//     * 测试用户的接口幂等性
//     */
//    @GetMapping(value = "/idempotent")
//    @ResponseBody
//    public String getIdempotent(HttpServletRequest request) {
//        String token = request.getHeader("token");
//        System.out.println("获取的token" + token);
//        Boolean delete = stringRedisTemplate.delete(token);
//        if (delete) {
//            return "成功";
//        }
//        return "重复请求";
//    }
//
//    /**
//     * 测试用户的接口幂等性
//     */
//    @GetMapping(value = "/send")
//    @ResponseBody
//    public String send() {
//        amqpTemplate.convertAndSend("zh.order.direct", "zh.gold.cancel", "我是消息");
//        return "成功";
//    }
//
//    /**
//     * 测试用户的接口幂等性
//     */
//    @GetMapping(value = "/send1")
//    @ResponseBody
//    public String send1() {
//        amqpTemplate.convertAndSend("zh.order.direct", "zh.order.cancel", "我是消息");
//        return "成功";
//    }
}
